package com.own.component.message.service.impl;

import cn.hutool.http.HttpRequest;
import com.own.component.autoconfig.AutoConfigInstance;
import com.own.component.message.model.BaseMessageModel;
import com.own.component.message.service.BaseSmsService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;

/**
 * UnicomSmsServiceImpl
 *
 * @author chenxueli
 * @date 2022-08-15 11:49:00
 */
@Slf4j
public class UnicomSmsServiceImpl implements BaseSmsService {

    /**
     * 发送信息
     *
     * @param item 发送的模型信息
     */
    @Override
    public void send(BaseMessageModel<String> item) {
        var property = AutoConfigInstance.INSTANCE.messageProperties.getUnicom();
        String gbkContent;
        try {
            gbkContent = URLEncoder.encode(item.getContent(), "gbk");
        } catch (UnsupportedEncodingException e) {
            log.error("编码异常");
            return;
        }
        var params = new HashMap<String, Object>(16);
        // 企业编码
        params.put("SpCode", property.getSpCode());
        // 用户名称
        params.put("LoginName", property.getAccount());
        // 用户密码
        params.put("Password", property.getPassword());
        // 短信内容, 最大402个字或字符（短信内容要求的编码为gb2312或gbk），短信发送必须按照短信模板，否则就会报模板不符，短信模板说明见4.1.1。
        params.put("MessageContent", gbkContent);
        // 手机号码(多个号码用”,”分隔)，最多1000个号码
        params.put("UserNumber", item.getReceiver());
        // 1 = 提交号码中有效的号码仍正常发出短信，无效的号码在返回参数faillist中列出
        // 其他 或该参数不存在 --- 提交号码中只要有无效的号码，那么所有的号码都不发出短信，无效号码在返回参数faillist中列出
        params.put("f", "1");
        // 流水号，20位数字，唯一 （规则自定义,建议时间格式精确到毫秒）必填参数，与回执接口中的流水号一一对应，不传后面回执接口无法查询数据。
        params.put("SerialNumber", StringUtils.leftPad(System.currentTimeMillis() + "", 20, "0"));
        var body = HttpRequest.get(property.getUrl()).form(params).execute().body();
        log.debug("body:{}", body);
    }

}
